#ifndef _OH_POLICY_COMPARISON_H
#define _OH_POLICY_COMPARISON_H

#include <oh/base.h>

_OH_BEGIN
_OH_POLICY_BEGIN

namespace comparison{

// TODO: heavy shit goes down there
// TODO: add equality and order functions change support

// Equality Comparison policy
template<typename Target>
class Equality
{
public:
    static bool Equal(Target const& a_Left, Target const& a_Right)
    {
        return a_Left == a_Right;
    }

protected:
    Equality();
};

// Order Comparison policy
template<typename Target>
class Order
    : public Equality<Target>
{
public:
    static bool Less(Target const& a_Left, Target const& a_Right)
    {
        return a_Left < a_Right;
    }

protected:
    Order();
};

}

_OH_POLICY_END
_OH_END

#endif // _OH_POLICY_COMPARSION_H